#!/bin/bash

# 检查是否为root用户
if [ "$(id -u)" != "0" ]; then
    echo "错误: 必须以root用户运行此脚本"
    exit 1
fi

# 自我复制到临时目录并执行（避免删除自身导致的问题）
SCRIPT_PATH=$(readlink -f "$0")
SCRIPT_DIR=$(dirname "$SCRIPT_PATH")
SCRIPT_NAME=$(basename "$SCRIPT_PATH")
TEMP_SCRIPT="/tmp/${SCRIPT_NAME}"

# 如果脚本不在临时目录中，则复制并执行临时副本
if [ "$SCRIPT_DIR" != "/tmp" ]; then
    echo "将卸载脚本复制到临时目录并从那里执行..."
    cp "$SCRIPT_PATH" "$TEMP_SCRIPT"
    chmod +x "$TEMP_SCRIPT"
    exec "$TEMP_SCRIPT" "$@"
    # 此处之后的代码不会执行，因为exec会替换当前进程
fi

# 以下代码只有在临时副本中执行时才会运行

# 解析命令行参数
usage() {
    echo "用法: $0 [选项]"
    echo "选项:"
    echo "  -p, --path PATH    指定安装路径前缀 (比如: ./uninstall.sh -p /usr/local/bin)"
    echo "  -h, --help         显示此帮助信息"
    exit 1
}

# 默认安装路径
CUSTOM_INSTALL_PATH=""

# 解析命令行参数
while [[ $# -gt 0 ]]; do
    key="$1"
    case $key in
        -p|--path)
            CUSTOM_INSTALL_PATH="$2"
            shift 2
            ;;
        -h|--help)
            usage
            ;;
        *)
            echo "未知选项: $1"
            usage
            ;;
    esac
done

# 导出安装路径环境变量，供config.sh使用
export CUSTOM_INSTALL_PATH

# 检查是否提供了安装路径
if [ -z "$CUSTOM_INSTALL_PATH" ]; then
    echo "错误: 必须指定安装路径"
    usage
fi

# 加载配置
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
source "${SCRIPT_DIR}/service/config.sh"

# 显示卸载信息
info "卸载路径: ${INSTALL_FULL_PATH}"

# 检查权限
check_root

# 提示用户卸载影响
echo -e "${YELLOW}警告：${NC}"
echo "1. 卸载过程将会停止所有 ${SOFTWARE_NAME} 服务"
echo "2. 所有文件将被备份到 ${INSTALL_PATH}/fdsmastergo_backup"
echo "3. 系统服务配置将被删除"
echo -e "${YELLOW}是否继续？[y/N]${NC}"
read -r response
if [[ ! "$response" =~ ^[yY]$ ]]; then
    echo "卸载已取消"
    exit 0
fi

# 停止并禁用服务
info "停止并禁用服务..."
systemctl stop fdsmastergo
systemctl disable fdsmastergo

# 备份当前安装
DATETIME=$(date +%Y%m%d_%H%M%S)
BACKUP_ROOT="${INSTALL_PATH}/fdsmastergo_backup"
BACKUP_FILE="${BACKUP_ROOT}/${SOFTWARE_NAME}_uninstall_${DATETIME}.tar.gz"

if [ -d "${INSTALL_FULL_PATH}" ]; then
    # 创建备份目录
    DATETIME=$(date +%Y%m%d_%H%M%S)
    BACKUP_ROOT="${INSTALL_PATH}/fdsmastergo_backup"
    mkdir -p "${BACKUP_ROOT}"
    
    # 完整备份安装目录
    info "备份整个安装目录，请稍后 （可能需要几分钟）..."
    tar -czf "${BACKUP_FILE}" -C "$(dirname "${INSTALL_FULL_PATH}")" "$(basename "${INSTALL_FULL_PATH}")" || warn "完整备份失败，继续执行卸载"
    info "完整备份已保存到: ${BACKUP_FILE}"
fi

# 删除服务文件
info "删除服务文件..."
rm -f "/etc/systemd/system/fdsmastergo.service"
systemctl daemon-reload

# 删除安装目录
info "删除安装目录..."
rm -rf "${INSTALL_FULL_PATH}"

echo
echo -e "${GREEN}卸载完成！${NC}"
echo -e "${YELLOW}卸载信息：${NC}"
echo -e "  1. 服务已停止并禁用"
echo -e "  2. 服务配置已删除"
echo -e "  3. 安装目录已删除"
echo -e "  4. 备份文件位置：${BACKUP_FILE}"
echo
echo -e "${YELLOW}如需完全清理，可以删除备份目录：${NC}"
echo -e "  rm -rf ${BACKUP_ROOT}"
echo
echo -e "${YELLOW}如需重新安装，请执行安装脚本。${NC}"
echo

# 自清理：删除临时脚本
if [ "$SCRIPT_DIR" = "/tmp" ]; then
    # 使用后台进程删除自身，避免"text file busy"错误
    (sleep 1; rm -f "$SCRIPT_PATH") &
fi

exit 0
